Connecting to a Data Source

Because an application uses connection pooling by referencing the JNDI name of a registered PooledConnectionDataSource object, code changes are not required for an application to use connection pooling.

The following example shows Java code that looks up and uses the JNDI-registered data source for connections. You specify the JNDI lookup name for the data source you created (as described in "Creating a Data Source Using the DataDirect® Connection Pool Manager").

//******************************************************************** 
//  
// Test program to look up and use a JNDI-registered data source. 
// 
// To run the program, specify the JNDI lookup name for the  
// command-line argument, for example: 
// 
//		java  TestDataSourceApp   
// 
//******************************************************************** 
import javax.sql.*; 
import java.sql.*; 
import javax.naming.*; 
import java.util.Hashtable; 
public class TestDataSourceApp 
{ 
	public static void main(String argv[]) 
	{ 
		String str JNDILookupName = "jdbc/SparkyOracle"; 
		// Hard-code the JNDI entry, the application does not need to change 
		DataSource ds = null; 
		Connection con = null; 
		Context ctx = null; 
		Hashtable env = null; 
		long nStartTime, nStopTime, nElapsedTime; 
		// Set up environment for creating InitialContext object 
		env = new Hashtable(); 
		env.put(Context.INITIAL_CONTEXT_FACTORY, 
			"com.sun.jndi.fscontext.RefFSContextFactory"); 
		env.put(Context.PROVIDER_URL, "file:c:\\JDBCDataSource"); 
		try { 
			// Retrieve the DataSource object that bound to the logical 
			// lookup JNDI name 
			ctx = new InitialContext(env); 
			ds = (DataSource) ctx.lookup(strJNDILookupName); 
		} catch (NamingException eName) { 
			System.out.println("Error looking up " +  
				strJNDILookupName + ": " +eName); 
			System.exit(0); 
		} 
		int numOfTest = 4; 
		int [] nCount = {100, 100, 1000, 3000}; 
		for (int i = 0; i < numOfTest; i ++) { 
			// Log the start time 
			nStartTime = System.currentTimeMillis(); 
			for (int j = 1; j <= nCount[i]; j++) { 
				// Get Database Connection 
				try { 
					con = ds.getConnection("scott", "tiger"); 
					// Do something with the connection 
					// ... 
					// Close Database Connection 
					if (con != null) con.close(); 
				} catch (SQLException eCon) { 
					System.out.println("Error getting a connection: " + eCon); 
					System.exit(0); 
				} // try getConnection 
			} // for j loop 
			// Log the end time 
			nStopTime = System.currentTimeMillis(); 
			// Compute elapsed time 
			nElapsedTime = nStopTime - nStartTime; 
			System.out.println("Test number " + i + ": looping " + 
				nCount[i] + " times"); 
			System.out.println("Elapsed Time: " + nElapsedTime + "\n"); 
		} // for i loop 
		// All done 
		System.exit(0); 
	} // Main 
} // TestDataSourceApp 

NOTE: The JDBC DataSource object class implements the DataSource interface for non-pooling in addition to ConnectionPoolDataSource for pooling. To use non-pooled connections, modify the example in "Creating a DataDirect SequeLink® Data Source Object" so that it registers the SequeLink Data Source using the JNDI entry

<jdbc/SparkyOracle>

You can then run the TestDataSourceApp without any modification:

java TestDataSourceApp